package cn.tedu.tedutest02202.mapper;


import cn.tedu.tedutest02202.pojo.dto.EmailUpdateDTO;
import cn.tedu.tedutest02202.pojo.entity.Email;
import cn.tedu.tedutest02202.pojo.vo.EmailLoginVO;
import cn.tedu.tedutest02202.pojo.vo.EmailVO;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author IMTI
 * @version 0.0.1
 */
@Repository
public interface EmailMapper {

    //-------------新增数据---------------

    /**
     * 插入单条数据
     * @param email Email账号数据
     * @return 插入的条数
     */
    int addNew(Email email);

    /**
     * 批量插入数据
     * @param emails 插入的若干条Email数据
     * @return 插入的条数
     */
    int addNewBatch(List<Email> emails);
    //---------------查询数据-----------------

    /**
     * 根据id查询数据
     * @param id 输入的id
     * @return 返回的email对象数据
     */
    EmailVO selectById(Long id);

    /**
     * 根据输入的Email账号查找密码
     * @return 密码和账号
     */
    EmailLoginVO selectPasswordByEmail(String email);

    /**
     * 查询所有数据
     * @return 所有数据列表
     */
    List<EmailVO> selectAll();

    /**
     * 根据用户名查询数据量
     * @param username 用户名
     * @return 数据条数
     */
    int countByUsername(String username);

    /**
     * 根据邮箱查询数据量
     * @param email 邮箱
     * @return 数据条数
     */
    int countByEmail(String email);

    /**
     * 查询数据总量
     * @return 数据总量
     */
    int countAll();

    /**
     * 统计非此id但符合用户名的数据数量
     * @param id 数据id
     * @param username 用户名
     * @return 匹配用户名但不匹配id的数据的数量
     */
    int countByNameAndNotId(Long id,String username);

    /**
     * 统计非此id但符合邮箱的数据数量
     * @param id 数据id
     * @param email 邮箱
     * @return 匹配邮箱但不匹配id的数据的数量
     */
    int countByEmailAndNotId(Long id,String email);
    //----------------删除数据---------------
    /**
     *  根据用户名删除数据
     * @param username 输入的用户名
     * @return 删除的条数
     */
    int deleteByUsername(String username);

    /**
     * 根据id删除数据
     * @param id 输入的id值
     * @return 被删除的条数
     */
    int deleteById(Long id);

    /**
     * 根据id批量删除数据
     * @return 被删除的条数
     */
    int deleteIds(List<Long> ids);

    //---------------修改数据--------------

    /**
     * 根据id修改Email参数
     * @param email 需要修改的Email对象
     * @return 被修改的条数
     */
    int updateById(Email email);



}
